/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    2013 year
 *    Author: Esipenko Aleksey (Alexorleon)
 *    E-Mail: alexorleon@gmail.com
 */
#include "addplace.h"
#include "ui_addplace.h"

AddPlace::AddPlace(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::AddPlace)
{
    ui->setupUi(this);

    createConnections();
    requestPlacements();

    ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Отмена"));

    ui->dateEdit->setCalendarPopup(true);
    ui->dateEdit->setDate(QDate::currentDate());

    // подгоняем столбцы по размеру окна
    ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
}

AddPlace::~AddPlace()
{
    delete ui;
}

void AddPlace::createConnections(){

    connect(ui->btnDelete,SIGNAL(clicked()),this,SLOT(slot_deleteItem()));
    connect(ui->btnAdd,SIGNAL(clicked()),this,SLOT(slot_addItem()));
    connect(ui->cmbBoxPlacement,SIGNAL(currentIndexChanged(int)),this,SLOT(slot_selectPlace()));
}

void AddPlace::requestPlacements(){

    ui->cmbBoxPlacement->clear();

    // заполняем combobox местами размещения
    QSqlQuery query;
    query.prepare("SELECT id, placement FROM placements;");
    query.exec();
    // добавляем id в качестве дополнительной информации для ускорения выборок
    while(query.next()){
        ui->cmbBoxPlacement->addItem(query.value(1).toString(), query.value(0).toInt());
    }

    // если пустые списки, то добавление места запрещено
    if(ui->cmbBoxPlacement->count() == 0){
        ui->btnAdd->setEnabled(false);
    }
}

void AddPlace::requestdatabase(){

    // заносим данные только выбранного QR-кода
    model.setQuery("SELECT placements.placement, places.date_time, places.id FROM placements, places "
                   "WHERE places.idplacement = placements.id AND places.idqr = "+QString::number(idqr)+";");
    ui->tableView->setModel(&model);
    ui->tableView->hideColumn(2);
    model.setHeaderData(0, Qt::Horizontal, tr("Место размещения"));
    model.setHeaderData(1, Qt::Horizontal, tr("Дата"));
    ui->tableView->show();
}

void AddPlace::slot_selectPlace(){

    // id места размещения
    place = ui->cmbBoxPlacement->itemData(ui->cmbBoxPlacement->currentIndex()).toInt();
    // при выборе выводим данные строки таблицы
    QSqlQuery query;
    query.prepare("SELECT phone, email FROM placements WHERE id=?;");
    query.addBindValue(place);
    query.exec();
    if(query.next())
    {
        ui->lineEditPhone->setText(query.value(0).toString());
        ui->lineEditEmail->setText(query.value(1).toString());
    }
}

void AddPlace::slot_addItem(){

    // берем текущую дату или заданную
    QString strdate("");
    if(ui->checkBox->isChecked()){
        strdate = ui->dateEdit->date().toString(Qt::ISODate);
    }else{
        strdate = QDate::currentDate().toString(Qt::ISODate);
    }
    // добавляем историю
    QSqlQuery query;
    query.prepare("INSERT INTO places (idqr, idplacement, date_time) VALUES (?,?,?)");
    query.addBindValue(idqr);
    query.addBindValue(place);
    query.addBindValue(strdate);
    query.exec();

    ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
    // и теперь обновляем tableview
    requestdatabase();
}

void AddPlace::changeStatus(){

    // изменяем статус
    QSqlQuery query;
    query.prepare("UPDATE qrcode SET status='"+tr("Размещен")+"' WHERE id="+QString::number(idqr)+";");
    query.exec();
}

void AddPlace::slot_deleteItem(){

    if(ui->tableView->currentIndex().isValid()){

        // запоминаем все выделенные строки
        QItemSelection selection(ui->tableView->selectionModel()->selection());

        if( !selection.isEmpty()){

            QList<int> rows;
            foreach(const QModelIndex &index, selection.indexes() ){
                rows.append(index.row());
            }
            qSort(rows);

            int prev = -1;
            // удаляем все выделенные строки
            for( int i = rows.count() - 1; i >= 0; i -= 1 ){
                int current = rows[i];
                if(current != prev){
                    // берем id из places и даляем там строку
                    QString strID(model.data(model.index(current, 2)).toString());
                    QSqlQuery query;
                    query.prepare("DELETE FROM places WHERE id="+strID+";");
                    query.exec();
                    prev = current;
                }
            }
            ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
            requestdatabase();
        }
    }
}
